import openai
from flask import Flask, request, jsonify

# 设置你的OpenAI API密钥
openai.api_key = "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"

# 创建Flask应用
app = Flask(__name__)

# 全局变量用于存储文件内容
file_content = None

# 读取txt文件的内容
def read_txt_file(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        return file.read()

# 将文件内容与GPT交互
def interact_with_gpt(file_content, user_input):
    # 将文件内容作为上下文传给模型
    messages = [{"role": "system", "content": "你是一位非常聪明的博客助手，我会提前给你一些词语，然后我会给你输入一个原始的句子，尽可能的用到这些词，在不改变原本大意的前提下，尽可能用到我给你的词语，不用完全用完，但是要贴切的用，然后再输出给我改进后的句子。"},
                {"role": "user", "content": f"请参考以下词语，并根据这些内容回答：\n{file_content}"}]

    # 继续用户的输入
    messages.append({"role": "user", "content": user_input})

    try:
        # 创建聊天完成请求
        response = openai.ChatCompletion.create(
            model="gpt-4",  # 你可以根据需要更改模型
            messages=messages
        )

        # 获取生成的回答
        assistant_response = response['choices'][0]['message']['content']
        return assistant_response

    except Exception as e:
        return f"Error generating chat response: {e}"

# GET接口
@app.route('/status', methods=['GET'])
def status():
    return jsonify({"status": "OK", "message": "服务正常运行中"})

# POST接口，用来接收前端请求并返回结果
@app.route('/process_input', methods=['POST'])
def process_input():
    try:
        if not file_content:
            return jsonify({"error": "未加载txt文件内容"}), 400

        # 从POST请求中获取用户输入
        user_input = request.json.get("user_input")

        if not user_input:
            return jsonify({"error": "未提供用户输入"}), 400

        # 获取GPT响应
        result = interact_with_gpt(file_content, user_input)

        return jsonify({"response": result})

    except Exception as e:
        return jsonify({"error": str(e)}), 500

# 主程序启动Flask服务
if __name__ == "__main__":
    # 启动时一次性读取txt文件内容并存储
    file_path = "prompt-100.txt"
    file_content = read_txt_file(file_path)
    print("文件内容已加载，请开始提问！")

    # 启动Flask应用
    app.run(host="0.0.0.0", port=1414, debug=True)
